/**
 * 基础情绪状态类，定义各种情绪状态的英文标识
 *
 * 提供静态属性返回对应的英文状态字符串
 */
class BaseEmotionalState {
	/**
	 * 待机状态的英文标识
	 * @returns {string} 待机状态标识 "idle"
	 */
	static get IDLE() { return "idle"; }
	/**
	 * 思考状态的英文标识
	 * @returns {string} 思考状态标识 "thinking"
	 */
	static get THINKING() { return "thinking"; }
	/**
	 * 说话状态的英文标识
	 * @returns {string} 说话状态标识 "speaking"
	 */
	static get SPEAKING() { return "speaking"; }
	/**
	 * 错误状态的英文标识
	 * @returns {string} 错误状态标识 "error"
	 */
	static get ERROR() { return "error"; }
	/**
	 * 等待用户输入状态的英文标识
	 * @returns {string} 等待输入状态标识 "await"
	 */
	static get AWAIT() { return "await"; }
	/**
	 * 开心状态的英文标识
	 * @returns {string} 开心状态标识 "happy"
	 */
	static get HAPPY() { return "happy"; }
	/**
	 * 生气状态的英文标识
	 * @returns {string} 生气状态标识 "angry"
	 */
	static get ANGRY() { return "angry"; }
	/**
	 * 害羞状态的英文标识
	 * @returns {string} 害羞状态标识 "shy"
	 */
	static get SHY() { return "shy"; }
	/**
	 * 疑问状态的英文标识
	 * @returns {string} 疑问状态标识 "question"
	 */
	static get QUESTION() { return "question"; }
	/**
	 * 无语状态的英文标识
	 * @returns {string} 无语状态标识 "speechless"
	 */
	static get SPEECHLESS() { return "speechless"; }
	/**
	 * 悲伤状态的英文标识
	 * @returns {string} 悲伤状态标识 "sad"
	 */
	static get SAD() { return "sad"; }
	/**
	 * 抵触状态的英文标识
	 * @returns {string} 抵触状态标识 "resist"
	 */
	static get RESIST() { return "resist"; }
};

/**
 * 情绪状态枚举类，继承自 BaseEmotionalState
 *
 * 用于表示角色的各种情绪状态，提供对应状态的中文描述
 *
 * 部分属性为情绪标签
 */
class EmotionalState extends BaseEmotionalState {
	/**
	 * 待机状态的中文描述
	 * @returns {string} 待机状态描述 "待机中"
	 */
	static get [BaseEmotionalState.IDLE]() { return "待机中" };
	/**
	 * 思考状态的中文描述
	 * @returns {string} 思考状态描述 "思考中..."
	 */
	static get [BaseEmotionalState.THINKING]() { return "思考中..." };
	/**
	 * 思考状态的情绪标签
	 * @returns {string} 思考状态的英文标识 "thinking"
	 */
	static get "<!-- thinking -->"() { return EmotionalState.THINKING; }
	/**
	 * 说话状态的中文描述
	 * @returns {string} 说话状态描述 "说话中"
	 */
	static get [BaseEmotionalState.SPEAKING]() { return "说话中" };
	/**
	 * 错误状态的中文描述
	 * @returns {string} 错误状态描述 "出错了"
	 */
	static get [BaseEmotionalState.ERROR]() { return "出错了" };
	/**
	 * 等待用户输入状态的中文描述
	 * @returns {string} 等待输入状态描述 "等待输入"
	 */
	static get [BaseEmotionalState.AWAIT]() { return "等待输入" };
	/**
	 * 开心状态的中文描述
	 * @returns {string} 开心状态描述 "开心"
	 */
	static get [BaseEmotionalState.HAPPY]() { return "开心" };
	/**
	 * 开心状态的情绪标签
	 * @returns {string} 开心状态的英文标识 "happy"
	 */
	static get "<!-- happy -->"() { return EmotionalState.HAPPY; }
	/**
	 * 生气状态的中文描述
	 * @returns {string} 生气状态描述 "生气"
	 */
	static get [BaseEmotionalState.ANGRY]() { return "生气" };
	/**
	 * 生气状态的情绪标签
	 * @returns {string} 生气状态的英文标识 "angry"
	 */
	static get "<!-- angry -->"() { return EmotionalState.ANGRY; }
	/**
	 * 害羞状态的中文描述
	 * @returns {string} 害羞状态描述 "害羞"
	 */
	static get [BaseEmotionalState.SHY]() { return "害羞" };
	/**
	 * 害羞状态的情绪标签
	 * @returns {string} 害羞状态的英文标识 "shy"
	 */
	static get "<!-- shy -->"() { return EmotionalState.SHY; }
	/**
	 * 疑问状态的中文描述
	 * @returns {string} 疑问状态描述 "疑问"
	 */
	static get [BaseEmotionalState.QUESTION]() { return "疑问" };
	/**
	 * 疑问状态的情绪标签
	 * @returns {string} 疑问状态的英文标识 "question"
	 */
	static get "<!-- question -->"() { return EmotionalState.QUESTION; }
	/**
	 * 无语状态的中文描述
	 * @returns {string} 无语状态描述 "无语"
	 */
	static get [BaseEmotionalState.SPEECHLESS]() { return "无语" };
	/**
	 * 无语状态的情绪标签
	 * @returns {string} 无语状态的英文标识 "speechless"
	 */
	static get "<!-- speechless -->"() { return EmotionalState.SPEECHLESS; }
	/**
	 * 悲伤状态的中文描述
	 * @returns {string} 悲伤状态描述 "悲伤"
	 */
	static get [BaseEmotionalState.SAD]() { return "悲伤" };
	/**
	 * 悲伤状态的情绪标签
	 * @returns {string} 悲伤状态的英文标识 "sad"
	 */
	static get "<!-- sad -->"() { return EmotionalState.SAD; }
	/**
	 * 抵触状态的中文描述
	 * @returns {string} 抵触状态描述 "抵触"
	 */
	static get [BaseEmotionalState.RESIST]() { return "抵触" };
	/**
	 * 抵触状态的情绪标签
	 * @returns {string} 抵触状态的英文标识 "resist"
	 */
	static get "<!-- resist -->"() { return EmotionalState.RESIST; }
	/**
	 * 自动获取所有情绪标签的数组
	 * @returns {Array<string>} 包含所有情绪标签的数组
	 */
	static getAllEmotionTags() {
		return Object.getOwnPropertyNames(EmotionalState).filter(prop => prop.startsWith('<!--') && prop.endsWith('-->'));
	}
	/**
	 * 获取所有大写get函数名的数组
	 * @returns {Array<string>} 包含所有大写get函数名的数组
	 */
	static getAllUppercaseGetters() {
		return Object.getOwnPropertyNames(BaseEmotionalState).filter(prop => /^[A-Z_]+$/.test(prop));
	}
};